//
//  WXGScrollView.m
//  ScrollView-task
//
//  Created by Mac on 15/8/11.
//  Copyright (c) 2015年 BV-3G. All rights reserved.
//

#import "WXGScrollView.h"

#define kItemWidth 150
#define kItemIntreval 30

#define kHeight self.frame.size.height
#define kWidth self.frame.size.width

#define kXContentOffset 2.5 *kItemWidth +kItemIntreval -kWidth/2//scrollView最初状态时的偏移量

@implementation WXGScrollView
{

    UIScrollView *_scrollView;
    
    
    UIView *_leftItem;
    UIView *_centerItem;
    UIView *_rightItem;
    
}

- (id)initWithFrame:(CGRect)frame {

    if (self = [super initWithFrame:frame]) {
    
        [self creatScrollView];
    }

    return self;
}


- (void)awakeFromNib{

    [super awakeFromNib];
    
    
    [self creatScrollView];
    
}


- (void)creatScrollView {

    //初始化_scrollView
    _scrollView = [[UIScrollView alloc] initWithFrame:self.bounds];
    
    //设置_scrollView的contentSize 除了留出足够加载单元格的宽以及单元格之间间距的宽度外，左右各留出一个单元格的宽度－>用来滚动
    _scrollView.contentSize = CGSizeMake(3*kItemWidth + 2*kItemIntreval +kItemWidth *2, kHeight);
    
    //设置_scrollView的代理
    _scrollView.delegate = self;
    
    [self addSubview:_scrollView];

    
    /*-------
     创建单元格 坐标均要向右➡️平移一个单元格的宽度 方便执行滚动
     --------*/
//    _leftItem = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kItemWidth, kHeight)];
    _leftItem = [[UIView alloc] initWithFrame:CGRectMake(kItemWidth, 0, kItemWidth, kHeight)];

    _leftItem.backgroundColor = [UIColor orangeColor];
    
    [_scrollView addSubview:_leftItem];
    
    
    
//    _centerItem = [[UIView alloc] initWithFrame:CGRectMake(kItemWidth + kItemIntreval, 0, kItemWidth, kHeight)];
    _centerItem = [[UIView alloc] initWithFrame:CGRectMake(kItemWidth*2 + kItemIntreval, 0, kItemWidth, kHeight)];
    
    _centerItem.backgroundColor = [UIColor yellowColor];
    
    [_scrollView addSubview:_centerItem];
    
    
//    _rightItem = [[UIView alloc] initWithFrame:CGRectMake(2*kItemWidth + 2*kItemIntreval, 0, kItemWidth, kHeight)];
    _rightItem = [[UIView alloc] initWithFrame:CGRectMake(3*kItemWidth + 2*kItemIntreval, 0, kItemWidth, kHeight)];
    
    _rightItem.backgroundColor = [UIColor greenColor];
    
    [_scrollView addSubview:_rightItem];
    
    
    /*设置_scrollView初始的偏移量 使中间视图处在屏幕的中央
     *
     *kXContentOffset = 2.5 *kItemWidth +kItemIntreval -kWidth/2
     *kXContentOffset:使中间视图处在屏幕的中央应设置的滚动偏移量
     *2.5 *kItemWidth +kItemIntreval:中间视图中线的便宜位置
     *kWidth/2:屏幕款的一半
     *
     */
    [_scrollView setContentOffset:CGPointMake(kXContentOffset, 0)];

}

/*
 *scrollView滚动时实时调用的方法
 */
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

    CGFloat xOffset = scrollView.contentOffset.x;
    
    //宏定义直接相减出现问题  获得scrollView初始时的偏移量
    CGFloat x = kXContentOffset;

    if ((int)(xOffset -x)%kItemWidth == 0) {
        
        //切换单元格元素的方法
        [self reloadView];
        
        //切换完数据之后 使_scrollView恢复初始时的滚动偏移量
        [_scrollView setContentOffset:CGPointMake(kXContentOffset, 0)];
    }

}

//当scrollView结束拖拽时调用的方法
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {

    /*当scrollView结束拖拽时调用的方法强制给scrollView设置一个宽度的偏移量
     *原因：调用切换单元格元素的方法的判断条件是滚动了一个单元格的宽度。而每次滚动时滚动的偏移量不会正好是一个单元格的宽度
     */
    
    /*
     *判断:偏移量与oldOffset（开始拖拽是产生的x方向的滚动偏移量）比较
     *如果是大于：向左拖拽 -> 滚动偏移量在初始偏移量的基础上加一个单元格的宽度
     *如果是小于：向右拖拽 -> 滚动偏移量在初始偏移量的基础上减一个单元格的宽度
     */
    if (targetContentOffset->x > kXContentOffset) {
        
        targetContentOffset->x = kItemWidth +kXContentOffset;
    }else if (targetContentOffset->x < kXContentOffset) {
    
        targetContentOffset->x = -kItemWidth +kXContentOffset;
    }
    

}


- (void)reloadView {

    UIColor *color1 = _leftItem.backgroundColor;
    UIColor *color2 = _centerItem.backgroundColor;
    UIColor *color3 = _rightItem.backgroundColor;
    
    /*将此时_scrollView的偏移量与初始偏移量（最初单元格所处的位置）相比较
     *大于 每个单元格切换下一个数据
     *大于 每个单元格切换上一个数据
     */
    if (_scrollView.contentOffset.x > kXContentOffset) {
        
        _leftItem.backgroundColor = color2;
        _centerItem.backgroundColor = color3;
        _rightItem.backgroundColor = color1;
        
    }else if (_scrollView.contentOffset.x < kXContentOffset) {
    
        _leftItem.backgroundColor = color3;
        _centerItem.backgroundColor = color1;
        _rightItem.backgroundColor = color2;
    }
    
}


@end
